import axios from "axios";
import { message } from 'ant-design-vue';
import rotuer from './../router'

/**
 * 每次请求前触发
 * config 是 请求相关配置
 */
axios.interceptors.request.use((config) => {

  // 统一配置全局请求头
  config.headers['Authorization'] = localStorage.getItem('token')

  return config
})

/**
 * 每次请求后都会调用
 * 必须有返回值，返回的值 就是 接口接收到的值
 * 
 * 请求成功会触发第一个回调函数
 * 请求失败 所谓的失败是协议层面的失败 或者 非200状态
 * 触发第二个回调函数
 */
axios.interceptors.response.use((response) => {
  // console.log(response.data)
  /**
   * 如果有meta 代表上传的接口
   * 那么直接放行
   */
  if (response.data.meta) {
    return response.data.data
  }

  /**
   * 需要和后端协商一个字段
   * 根据这个字段判断该请求业务是否成功
   * 
   * 根据code判断，1000成功 非 1000失败
   * 
   * 成功
   *  正常放行
   * 失败
   *  提示报错
   *  阻塞后续代码运行
   */

  if (response.data.code !== 1000) {
    // 提示报错
    message.error(response.data.message);

    // 抛出 阻塞后续代码
    throw new Error(response.data.message)
  }

  // 解构出业务需要的数据
  return response.data.data
}, (error) => {
  // 登录失效
  if (error.response.status === 401) {
    message.error('登录失效');

    // 跳转到登录页面
    rotuer.push('/login')
  }
})

export default axios